#include "MenuArchivosDeUsuario.h"


MenuArchivosDeUsuario::MenuArchivosDeUsuario(int idUsuario, string nombreUsuario) : usuarioId(idUsuario), usuarioNombre(nombreUsuario) {
	crearMenu();
}

MenuArchivosDeUsuario::~MenuArchivosDeUsuario() {
	borrarMenu();
}

void MenuArchivosDeUsuario::crearMenu() {
	Descarga descarga(usuarioId, getpid());
	list<string> archivos = descarga.verArchivosCompartidos();

	list<string>::iterator it = archivos.begin();
	int i= 1;
	for (; it != archivos.end(); it++) {
		DescargarArchivoCommand* command = new DescargarArchivoCommand(usuarioId,*it);
		commands[i] = command;
		MenuItem* item = new MenuItem(i,getFileName(*it),command);
		opciones[i] = item;
		add(*item);
		i++;
	}

	VolverAlMenuAnteriorCommand* volverCommand = new VolverAlMenuAnteriorCommand();
	commands[i] = volverCommand;
	MenuItem* itemVolver = new MenuItem(i,"Volver",volverCommand);
	opciones[i] = itemVolver;

	add(*itemVolver);
}

void MenuArchivosDeUsuario::borrarMenu() {
	CommandsMap::iterator endCommands = commands.end();
	for (CommandsMap::iterator it = commands.begin(); it != endCommands; ++it) {
		delete commands[(*it).first];
	}
	commands.clear();

	MenuItemsMap::iterator endMenuItems = opciones.end();
	for (MenuItemsMap::iterator it = opciones.begin(); it != endMenuItems; ++it) {
		delete opciones[(*it).first];
	}
	opciones.clear();
}

void MenuArchivosDeUsuario::update() {
	cout << "Archivos compartidos de \"" << usuarioNombre << "\":" << endl << endl;
	display();
	cout << endl << "Opción: ";

	string input;
	int opcion;
	cin.clear();
	getline(cin, input);
	stringstream myStream(input);
	if (myStream >> opcion) {
		select(opcion);
	}
}
